package cn.tedu.springDI;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;

@Component
public class User {
    /*注入的方式：属性注入*/
    /*@Autowired(required = true)
      @Autowired，自动装配，此注解有Spring框架提供的，可以给变量赋值
      默认都必须强行要求值的注入，程序启动过程中没有找到可以注入的资源，就会报错！！！
      @Autowired(required = false)不会强行注入*/
    //@Autowired
    /*对于@Autowired注入所产生的注入歧义的问题，可以使用@Qualifier("beanId")解决，
    要与@Autowired一起使用*/
    //@Qualifier("gamePhone")
    //@Resource
    private Phone phone;

    /*注入的方式：构造方法注入*/
    /*如果无参构造，有参构造同时存在，Spring会默认加载无参构造，
      需要添加注解@Autowired来改变默认方式
      如果只有有参构造，则默认加载有参构造，可以不用添加注解@Autowired*/
    public User() {
    }

    @Autowired
    public User(@Qualifier("gamePhone") Phone phone) {
        this.phone = phone;
    }

    /*注入的方式：Set方法注入*/
    //@Autowired
    public void setPhone(Phone phone) {
        this.phone = phone;
    }

    /*注入的方式：普通方法注入*/
    //@Autowired
    public void test(Phone phone) {
        this.phone = phone;
    }

    public void playGame() {
        System.out.println("用户使用" + phone + "玩游戏");
    }
}
